package filter

import (
	. "TaylorTest/app"
	"TaylorTest/model"
	"encoding/json"
	"fmt"
	"net/http"
)

// 登录验证中间件
type LoginFilter struct {
	Filter               // 相当于内嵌 父类 可以实现继承父类的方法
	ExcludedUrl []string //不需要经过LoginFilter的页面。// 对父类的扩展
}

func (filter *LoginFilter) OnEntry(context *Context) {
	//如果是不需要登录的页面，则直接返回
	url := context.Request.URL.Path
	if IndexOf(filter.ExcludedUrl, url) {
		return
	}
	//简单弄，如果cookie["token"]不为空就认为已经登录了，则返回，否则跳转到登录页面
	token, _ := context.Request.Cookie("token")
	if token == nil {
		if context.IsAjax() {
			result := model.JsonResult{IsSuccess: false, Message: "未登录，请先登录！"}
			resultJson, _ := json.Marshal(result)
			fmt.Fprintf(context.ResponseWriter, string(resultJson))
		} else {
			http.Redirect(context.ResponseWriter, context.Request, "/static/login.html", 301)
		}
		context.End()
	}
}
